Cloud computing has become a popular approach for obtaining access to (sometimes large-scale) computing resources. Cloud computing allows users to build virtualized data centers which include compute, networking, application, and storage resources without having to build or maintain a physical computing infrastructure. The virtualized data center may provide a user with a segmented virtual network located in the cloud, typically alongside virtualized data centers of other users. Such a virtualized data center may be rapidly scaled up (or down) according to the computing needs of a given user without the need to maintain excess computing capacity between peak demand periods. For example, an online retailer can scale a virtualized data center to meet increased demand during the holiday shopping season without having to maintain the underlying physical computing infrastructure used to provide the retailer's online presence.
The ability to successfully provide a cloud computing service depends on a number of factors, including the ability to provide effective end-to-end management services, security, and the ability to quickly provision services for customers. However, provisioning frequently takes days or even weeks, as configuring even a simple virtualized data center can require hundreds, if not thousands of variables, parameters and settings to be specified. For example, settings for virtualized networking components (e.g., routers, switches, firewalls, etc.), virtual machines and, a desired set of applications all need to be specified and used to configure the underlying physical computing infrastructure. Typically, a network engineer maintains a database or spreadsheet of settings for a given virtualized data center. Using this information, the network engineer manually configures the underlying physical systems to provide a virtualized data center that meets the specifications of a given customer.